#pragma once
#include <mutex>
#include <unistd.h>
#include <thread>
#include <condition_variable>
#include <functional>
#include <future>
#include <atomic>
#include <vector>
#include <queue>

class ThreadPool {
private:
    std::vector<std::thread> threads_;       // 线程池中的工作线程（黄色圆圈标记）
    std::queue<std::function<void()>> taskqueue_;  // 待执行的任务队列
    std::mutex mutex_;                      // 任务队列同步互斥锁
    std::condition_variable condition_;     // 任务队列同步条件变量
    std::atomic_bool stop_;                 // 线程池停止标志（true时线程退出）

    std::string threadtype_;                // 线程种类 “IO” “WORKS”

public:
    ThreadPool(size_t threadnum,const std::string&threadtype);           // 构造函数（启动指定数量线程）
    void addtask(std::function<void()> task); // 添加任务到队列
    ~ThreadPool();                          // 析构函数（安全停止所有线程）
};